//
//  main.m
//  base_foundation-04-nsstring常用函数
//
//  Created by China Dragon on 2023/7/9.
//
//视频教学 https://www.bilibili.com/video/BV1EE41157Uz/?p=55&spm_id_from=pageDriver&vd_source=4110e082785c06a8c24a5c86c6182472
#import <Foundation/Foundation.h>

void caseTest()
{
    NSString *str = @"iosandAndroid";
    NSString *str2 = @"iosas";
    NSString *str3 = @"iosandAndroid";
    NSLog(@"转大写 %@",[str uppercaseString]);
    NSLog(@"转小写 %@",[str lowercaseString]);
    NSLog(@"首字母变大写，其它的都小写 %@",[str capitalizedString]);
    NSLog(@"字符串比较结果 %i",[str isEqualToString:str2]);//BOOL 1:yes ,0 : no
    //字符串比较结果 0
    
    BOOL result = [str isEqualToString:str3];
    NSLog(@"字符串比较结果 %i",result);//BOOL 1:yes ,0 : no
    //字符串比较结果 1
    /*
         NSOrderedAscending = -1L, 右边的比左边的大，升序
         NSOrderedSame, 两个相同
         NSOrderedDescending 左边的比右边的大，降序
     
     */
    NSComparisonResult compariResult = [@"abc" compare:@"Abc"];
    
    if(compariResult == NSOrderedAscending){
        NSLog(@"右边 比 左边 大");
    }else  if(compariResult == NSOrderedSame){
        NSLog(@"右边 和 左边 相同");
    }else  if(compariResult == NSOrderedDescending){
        NSLog(@"右边 比 左边 小");
    }
    //右边 比 左边 小 ; 因为 小写字母比大写字母大32，a = 97, A = 65;
    
    //判断一个字符是否为小写字母，如果是，将它转换成大写字母，否则，不转换。)
    //https://blog.csdn.net/qq_41370698/article/details/115183652
    
    
    
    //字符串搜索
    NSString *str6 = @"123456vdagr.txt";
    BOOL preResult = [str6 hasPrefix:@"123"];
    NSLog(@"是否以123开头 前缀搜索结果 %i", preResult);
    NSLog(@"是否以txt结尾 后缀搜索结果 %i", [str6 hasSuffix:@"txt"]);
    //前缀搜索结果 1
    //后缀搜索结果 1
    
    //按住 键盘 option，鼠标点击rangeOfString 查看 注释 ； 默认的是从头（从左 到 右）
    NSRange range = [str6 rangeOfString:@"345"];//如果有多个345，oc里找到第一就不会继续搜索里，所以返回的是第一
    // range.length == 0 表示没有找到
    if(range.location == NSNotFound){
        NSLog(@"没有找到");
    }else{
        NSLog(@"检测 345 的信息： %@", NSStringFromRange(range));
        //检测 345 的信息： {2, 3}
    }
    
    //options:NSBackwardsSearch 反向（尾部 从右 到 左））开始搜索，从尾部开始搜索
    NSRange range2 = [str6 rangeOfString:@"345" options:NSBackwardsSearch];//如果有多个345，oc里找到第一就不会继续搜索里，所以返回的是第一
    
    if(range2.location == NSNotFound){
        NSLog(@"没有找到");
    }else{
        NSLog(@"NSBackwardsSearch 检测 345 的信息： %@", NSStringFromRange(range2));
        //检测 345 的信息： {2, 3}
    }
    
    //从尾部开始搜索 ，指定范围
//    NSRange range3 = [str6 rangeOfString:@"345" options:NSBackwardsSearch range:<#(NSRange)#>];
    
}

#pragma mark 字符串截取
void subString(){
    NSString *str = @"123456";
    //从索引3开始截取到尾部
    NSLog(@"%@",[str substringFromIndex:3]);
    //456
    //截取到索引值前面的数据，不包含索引当前位置
    NSLog(@"%@",[str substringToIndex:2]);
    //12
    
    //指定范围进行截取
    NSRange range = NSMakeRange(2, 3);
    NSLog(@"%@",[str substringWithRange:range]);
    //345
    
    //字符串分隔
    NSString *str2 = @"1-2-3-4-5";
    NSArray *arr = [str2 componentsSeparatedByString:@"-"];
    NSLog(@"%@", arr);
//    (
//    1,
//    2,
//    3,
//    4,
//    5
//)
    
    NSString *arrStr2 = [arr objectAtIndex:2];
    NSLog(@"arrStr2 = %@", arrStr2);
    //arrStr2 = 3
    
}

#pragma mark 与路径相关的方法
void testPath(){
    //快速创建一个自动释放的数组
    NSMutableArray *components = [NSMutableArray array];
    [components addObject:@"user1"];
    [components addObject:@"MK"];
    [components addObject:@"Deskop"];
    
    //将数组中所有字符串拼接成一个路径
    NSString *path = [NSString pathWithComponents:components];
    NSLog(@"path: %@", path);
    // path: user1/MK/Deskop
    
    //pathComponents 将路径分解成一个数组
    NSArray *cmps = [path pathComponents];
    NSLog(@"cmps: %@", cmps);
//    cmps: (
//        user1,
//        MK,
//        Deskop
//    )
    
    //判断是否是绝对路径 path 是不可变的，不管下面怎么操作都不会变
    path = @"/user/test/absout"; // 绝对路径
//    path = @"user/test/absout";// 相对路径
    //判断是否为绝对路径（依据前面是否有无/）
    BOOL *b = [path isAbsolutePath];
    NSLog(@"是否绝对路径：%i", b);
    //是否绝对路径：0 表示false
    
    NSString *lastDectory = [path lastPathComponent];
    NSLog(@"返回最后一个目录：%@", lastDectory);
    //返回最后一个目录：absout
    NSLog(@"删除最后一个目录：%@",[path stringByDeletingLastPathComponent]);
    //删除最后一个目录：/user/test
    
    //在最后面拼接一个目录
    NSLog(@"在最后面拼接一个目录：%@",[path stringByAppendingPathComponent:@"ppae"]);
    //在最后面拼接一个目录：/user/test/absout/ppae
    
}

#pragma mark 扩展名处理
void extension(){
    NSString *path = @"/test/user/test.txt";
    NSLog(@"扩展名：%@", [path pathExtension]);
    //扩展名：txt
    
    //删除扩展名，
    NSLog(@"删除扩展名：%@", [path stringByDeletingPathExtension]);
    NSLog(@"添加扩展名：%@", [@"abs" stringByAppendingPathExtension:@"map3"]);
    // 添加扩展名：abs.map3
}

#pragma mark 其它用法
void other(){
    NSString *str = @"12";
    int a = [str intValue];
    NSLog(@"a = %i",a);
    //a = 12
    
    /*
        length 计算的是字数
     
        在 C 语言中计算的是字符数 ，一个中文占用 3 个字符
     */
   int strLength = [@"我是字符串" length];
    NSLog(@"strLength = %zi", strLength);
    //strLength = 5， 如果在c语言 是 15
    
    unichar c = [@"absd" characterAtIndex:1];
    NSLog(@"取一个字符：%c", c);
    //取一个字符：b
    
    //返回C语言中的字符串
    const char *s = [@"abfaf24s" UTF8String];
    NSLog(@"返回C语言中的字符串: %s",s);
    // 返回C语言中的字符串: abfaf24s
    
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
//        caseTest();
        
        //2023-07-09 19:58:25.979257+0800 base_foundation-04-nsstring常用函数[1370:52961] 转大写 IOSANDANDROID
//        2023-07-09 19:58:25.979686+0800 base_foundation-04-nsstring常用函数[1370:52961] 转小写 iosandandroid
        
//        subString();
        
//        testPath();
        
//        extension();
        other();
        
    }
    return 0;
}
